# Primitive type & Reference type
# Goal
- Primitive type์ ๋ํด ์ค๋ช ํ ์ ์๋ค.
- Reference type์ ๋ํด ์ค๋ช ํ ์ ์๋ค.
# Abstract
์๋ฐ์๋ ๊ธฐ๋ณธํ(Primitive type)๊ณผ ์ฐธ์กฐํ(Reference type)์ด ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๋ถ๋ฅ๋ ๋ค์์ฒ๋ผ ๊ฐ์ง๋๋ค.
Java Data Type
ใด Primitive Type
ใด Boolean Type(boolean)
ใด Numeric Type
ใด Integral Type
ใด Integer Type(short, int, long)
ใด Floating Point Type(float, double)
ใด Character Type(char)
ใด Reference Type
ใด Class Type
ใด Interface Type
ใด Array Type
ใด Enum Type
ใด etc.
# Primitive type (๊ธฐ๋ณธํ ํ์ )
JAVA์์๋ ์ด 8๊ฐ์ง์ Primitive type์ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ ์ ๊ณตํฉ๋๋ค.
์๋ฐ์์ ๊ธฐ๋ณธ ์๋ฃํ์ ๋ฐ๋์ ์ฌ์ฉํ๊ธฐ ์ ์ ์ ์ธ(Declared)๋์ด์ผ ํฉ๋๋ค.
OS์ ๋ฐ๋ผ ์๋ฃํ์ ๊ธธ์ด๊ฐ ๋ณํ์ง ์์ต๋๋ค.
๋น๊ฐ์ฒด ํ์ ์ ๋๋ค. ๋ฐ๋ผ์ null ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ง์ฝ Primitive type์ Null์ ๋ฃ๊ณ ์ถ๋ค๋ฉด Wrapper Class๋ฅผ ํ์ฉํฉ๋๋ค.
์คํ(Stack) ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค.
# boolean
๋ ผ๋ฆฌํ์ธ boolean์ ๊ธฐ๋ณธ๊ฐ์ false์ด๋ฉฐ ์ฐธ๊ณผ ๊ฑฐ์ง์ ์ ์ฅํ๋ ํ์ ์ ๋๋ค. ์ฃผ๋ก yes/no, on/off ๋ฑ์ ๋ ผ๋ฆฌ ๊ตฌํ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ ๋๊ฐ์ง ๊ฐ๋ง ํํํ๋ฏ๋ก ๊ฐ์ฅ ํฌ๊ธฐ๊ฐ ์์ต๋๋ค.
boolean์ ์ค์ ๋ก 1bit๋ฉด ์ถฉ๋ถํ์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ต์ ๋จ์๊ฐ 1byte์ด๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ 1byte์ ๋๋ค.
# byte
- byte๋ ์ฃผ๋ก ์ด์ง๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ฌ์ฉ๋๋ ํ์ ์ ๋๋ค.
# short
- short๋ C์ธ์ด์์ ํธํ์ ์ํด ์ฌ์ฉ๋๋ ํ์ ์ผ๋ก ์ ์ฌ์ฉ๋์ง๋ ์๋ ํ์ ์ ๋๋ค.
# int
- int ํ์ ์๋ฐ์์ ์ ์ ์ฐ์ฐ์ ํ๊ธฐ ์ํ ๊ธฐ๋ณธ ํ์ ์ ๋๋ค. ์ฆ, byte ํน์ short ์ ๋ณ์๊ฐ ์ฐ์ฐ์ ํ๋ฉด ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ intํ์ด ๋ฉ๋๋ค.
# long
- ์์น๊ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ํ๋ก๊ทธ๋จ(์ํ ๋ฐ ์ฐ์ฃผ์ ๊ด๋ จ๋ ํ๋ก๊ทธ๋จ)์์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
- long ํ์ ์ ๋ณ์๋ฅผ ์ด๊ธฐํ ํ ๋์๋ ์ ์๊ฐ ๋ค์ ์ํ๋ฒณ L์ ๋ถ์ฌ์ long ํ์ (์ฆ, 8byte)์ ์ ์ ๋ฐ์ดํฐ์์ ์๋ ค์ฃผ์ด์ผ ํฉ๋๋ค. ๋ง์ผ ์ ์๊ฐ์ด int์ ๊ฐ์ ์ ์ฅ ๋ฒ์๋ฅผ ๋๋ ์ ์์์ L์ ๋ถ์ด์ง ์๋๋ค๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
long l = 2147483648; // ์ปดํ์ผ ์๋ฌ ๋ฐ์ long l = 2147483648L;
# float, double
์ค์๋ฅผ ๊ฐ์์ ์ง์ ํ์์ผ๋ก ์ ์ฅํ๋ ๋ถ๋์์์ ๋ฐฉ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
๊ฐ์๋ฅผ ํํํ๋๋ฐ ์์ด doubleํ์ด floatํ๋ณด๋ค ํํ ๊ฐ๋ฅ ๋ฒ์๊ฐ ๋ ํฌ๋ฏ๋ก doubleํ์ด ๋ณด๋ค ์ ๋ฐํ๊ฒ ํํํ ์ ์์ต๋๋ค.
์๋ฐ์์ ์ค์์ ๊ธฐ๋ณธ ํ์ ์ doubleํ์ด๋ฏ๋ก floatํ์๋ ์ํ๋ฒณ F๋ฅผ ๋ถ์ฌ์ float ํ์์ ๋ช ์ํด์ฃผ์ด์ผ ํฉ๋๋ค.
float f = 1234.567; // ๋ฌด์กฐ๊ฑด double ํ์ ์ผ๋ก ์ดํดํ๋ ค๊ณ ํ๋ฏ๋ก ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. float f = 1234.567F; // float type์ด๋ผ๋ ๊ฒ์ ํ์ํด์ผ ํฉ๋๋ค.
# Reference type (์ฐธ์กฐํ ํ์ )
JAVA์์ Primitive type์ ์ ์ธํ ํ์ ๋ค์ด ๋ชจ๋ Reference type ์ ๋๋ค.
Reference type์ JAVA์์ ์ต์์ธ java.lang.Objectํด๋์ค๋ฅผ ์์ํ๋ ๋ชจ๋ ํด๋์ค๋ค์ ๋งํฉ๋๋ค. ๋ฌผ๋ก new๋ก ์ธํ์ฌ ์์ฑํ๋ ๊ฒ๋ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ Heap ์์ญ์ ์์ฑ์ ํ๊ฒ๋๊ณ , Garbage Collector๊ฐ ๋๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
ํด๋์ค ํ์ (class type) , ์ธํฐํ์ด์ค ํ์ (interface type) , ๋ฐฐ์ด ํ์ (array type) , ์ด๊ฑฐ ํ์ (enum type) ์ด ์์ต๋๋ค.
๋น ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ Null์ด ์กด์ฌํฉ๋๋ค.
๋ฌธ๋ฒ์์ผ๋ก๋ ์๋ฌ๊ฐ ์์ง๋ง ์คํ์์ผฐ์ ๋ ์๋ฌ๊ฐ ๋๋ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ์ฒด๋ ๋ฐฐ์ด์ Null ๊ฐ์ผ๋ก ๋ฐ์ผ๋ฉด NullPointException์ด ๋ฐ์ํ๋ฏ๋ก ๋ณ์ ๊ฐ์ ๋ฃ์ด์ผ ํฉ๋๋ค.
Heap ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋ ์ธ์คํด์ค๋ ๋ฉ์๋๋ ๊ฐ์ข ์ธํฐํ์ด์ค์์ ์ ๊ทผํ๊ธฐ ์ํด JVM์ Stack ์์ญ์ ์กด์ฌํ๋ Frame์ ์ผ์ข ์ ํฌ์ธํฐ(C์ ํฌ์ธํฐ์๋ ๋ค๋ฆ ๋๋ค.)์ธ ์ฐธ์กฐ๊ฐ์ ๊ฐ์ง๊ณ ์์ด ์ด๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ํธ๋ค๋งํฉ๋๋ค.
# String Class
ํด๋์คํ์์๋ String ํด๋์ค๋ ์กฐ๊ธ ํน๋ณํฉ๋๋ค. ์ด ํด๋์ค๋ ์ฐธ์กฐํ์ ์ํ์ง๋ง ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ์ ๊ธฐ๋ณธํ ์ฒ๋ผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ณ(immutable)ํ๋ ๊ฐ์ฒด์ ๋๋ค. String ํด๋์ค์๋ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๋ ๋ฉ์๋๋ค์ด ์กด์ฌํ์ง๋ง ํด๋น ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พผ๋ค ํด๋ ์๋ก์ด String ํด๋์ค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธํ ๋น๊ต๋ == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง๋ง String ๊ฐ์ฒด๊ฐ์ ๋น๊ต๋ .equals() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.